Next: Shell Arguments, Up: Processes [Contents][Index]
There are three primitives that create a new subprocess in
which to run a program. One of them, make-process,
creates an asynchronous process and returns a process object (see
Asynchronous
Processes). The other two, call-process and
call-process-region, create a synchronous process
and do not return a process object (see Synchronous
Processes). There are various higher-level functions that
make use of these primitives to run particular types of
process.
Synchronous and asynchronous processes are explained in the following sections. Since the three functions are all called in a similar fashion, their common arguments are described here.
In all cases, the functions specify the program to be run. An
error is signaled if the file is not found or cannot be executed.
If the file name is relative, the variable exec-path
contains a list of directories to search. Emacs initializes
exec-path when it starts up, based on the value of
the environment variable PATH. The standard file
name constructs, ‘~’,
‘.’, and ‘..’,
are interpreted as usual in exec-path, but
environment variable substitutions
(‘$HOME’, etc.) are not recognized; use
substitute-in-file-name to perform them (see
File Name
Expansion). nil in this list refers to
default-directory.
Executing a program can also try adding suffixes to the specified name:
This variable is a list of suffixes (strings) to try
adding to the specified program file name. The list should
include "" if you want the name to be tried
exactly as specified. The default value is
system-dependent.
Please note: The argument program contains only the name of the program file; it may not contain any command-line arguments. You must use a separate argument, args, to provide those, as described below.
Each of the subprocess-creating functions has a
buffer-or-name argument that specifies where the
output from the program will go. It should be a buffer or a
buffer name; if it is a buffer name, that will create the buffer
if it does not already exist. It can also be nil,
which says to discard the output, unless a custom filter function
handles it. (See Filter Functions,
and Read and
Print.) Normally, you should avoid having multiple processes
send output to the same buffer because their output would be
intermixed randomly. For synchronous processes, you can send the
output to a file instead of a buffer (and the corresponding
argument is therefore more appropriately called
destination). By default, both standard output and
standard error streams go to the same destination, but all the 3
primitives allow optionally to direct the standard error stream
to a different destination.
All three of the subprocess-creating functions allow to
specify command-line arguments for the process to run. For
call-process and call-process-region,
these come in the form of a &rest argument,
args. For make-process, both the program
to run and its command-line arguments are specified as a list of
strings. The command-line arguments must all be strings, and they
are supplied to the program as separate argument strings.
Wildcard characters and other shell constructs have no special
meanings in these strings, since the strings are passed directly
to the specified program.
The subprocess inherits its environment from Emacs, but you
can specify overrides for it with
process-environment. See System
Environment. The subprocess gets its current directory from
the value of default-directory.
The value of this variable is a string, the name of a
directory that contains programs that come with GNU Emacs and
are intended for Emacs to invoke. The program
movemail is an example of such a program; Rmail
uses it to fetch new mail from an inbox.
The value of this variable is a list of directories to
search for programs to run in subprocesses. Each element is
either the name of a directory (i.e., a string), or
nil, which stands for the default directory
(which is the value of default-directory). See
executable-find, for
the details of this search.
The value of exec-path is used by
call-process and start-process when
the program argument is not an absolute file
name.
Generally, you should not modify exec-path
directly. Instead, ensure that your PATH
environment variable is set appropriately before starting
Emacs. Trying to modify exec-path independently
of PATH can lead to confusing results.
Next: Shell Arguments, Up: Processes [Contents][Index]